package com.qike.yuandongguoji.service;

import com.qike.yuandongguoji.controller.NewUseCarListVo;
import com.qike.yuandongguoji.dto.*;
import com.qike.yuandongguoji.pojo.UseCar;
import com.qike.yuandongguoji.vo.*;
import org.springframework.web.multipart.MultipartFile;

import java.text.ParseException;
import java.util.List;
import java.util.Map;

/**
 * @Author: Eric.zhou
 * @Date: 2020/8/5 10:42
 */
public interface PcService {


    /**
     * 登录
     * @return
     */
    PCLoginVo login(PcLoginDto pcLoginDto) throws Exception;

    /**
     * 请假列表统计
     * @param loginDto
     * @return
     */
    LeaveListVo leaveList(LeaveListDto loginDto);

    /**
     * 批量请假修改状态
     * @param leaveChangeStatusDto
     */
    void leaveChangeStatus(LeaveChangeStatusDto leaveChangeStatusDto) throws Exception;

    /**
     * 差旅列表
     * @param outListDto
     * @return
     */
    OutListVo outList(OutListDto outListDto);

    /**
     * 差旅行程详情
     * @param id
     * @return
     */
    OutInfoVo outInfo(Integer id) throws Exception;

    /**
     * 差旅行程批量修改状态
     * @param leaveChangeStatusDto
     */
    void outChangeStatus(LeaveChangeStatusDto leaveChangeStatusDto) throws Exception;

    /**
     * 用车申请列表
     * @param useCarListDto
     * @return
     */
    UserCarVo useCarList(UseCarListDto useCarListDto);

    /**
     * 确认用车申请
     * @param carConfirmDto
     */
    void carConfirm(CarConfirmDto carConfirmDto) throws Exception;

    /**
     * 拒绝用车申请
     * @param carRefuseDto
     */
    void carRefuse(CarRefuseDto carRefuseDto) throws Exception;


    /**
     * PC端我要订车
     * @param pcOrderCarDto
     */
    Integer PCOrderCar(PCOrderCarDto pcOrderCarDto) throws Exception;

    /**
     * 会议日历
     * @param dates
     * @return
     */
    List<MeetingListVo> meetingList(String dates) throws Exception;

    /**
     * 取消会议
     * @param id
     */
    void cancelMeeting(Integer id) throws Exception;

    /**
     * 预订会议
     * @param orderMeetingDto
     */
    void orderMeeting(OrderMeetingDto orderMeetingDto) throws Exception;

    /**
     * 员工列表
     * @param userListDto
     * @return
     */
    UserListVo userList(UserListDto userListDto);

    /**
     * 添加用户
     * @param addUserDto
     */
    void addUser(AddUserDto addUserDto) throws Exception;

    /**
     * 编辑用户
     * @param editUserDto
     */
    void editUser(EditUserDto editUserDto) throws Exception;

    /**
     * 删除用户
     * @param id
     */
    void delUser(Integer id);

    /**
     * 部门列表
     * @param deptListDto
     * @return
     */
    DeptListVo deptList(DeptListDto deptListDto);

    /**
     * 编辑部门
     * @param deptEditDto
     */
    void deptEdit(DeptEditDto deptEditDto) throws Exception;

    /**
     * 添加部门
     * @param deptAddDto
     */
    void deptAdd(DeptAddDto deptAddDto) throws Exception;

    /**
     * 删除部门
     * @param id
     */
    void deptDel(Integer id) throws Exception;

    /**
     * 车辆列表
     * @param carListDto
     * @return
     */
    CarListVo carList(CarListDto carListDto);

    /**
     * 车辆编辑
     * @param carEditDto
     */
    void carEdit(CarEditDto carEditDto) throws Exception;

    /**
     * 车辆删除
     * @param id
     */
    void carDel(Integer id) throws Exception;

    /**
     * 用户下拉搜索
     * @param name
     * @param role
     * @return
     */
    List<UserAllListVo> userAllList(String name, String role);

    /**
     * 职位列表
     * @return
     */
    List<PositionListVo> positionList();

    /**
     * 车辆下拉列表
     * @param carNo
     * @return
     */
    List<CarNoListVo> carNoList(String carNo);

    /**
     * 部门下拉列表
     * @param name
     * @return
     */
    List<AllDeptListVo> allDeptList(String name);

    /**
     * 出差添加
     * @param outAddtDto
     */
    void outAdd(OutAddtDto outAddtDto) throws Exception;

    /**
     * 添加车辆
     * @param carAddDto
     */
    void carAdd(CarAddDto carAddDto);

    /**
     * 新差旅行程
     * @param newOutListDto
     * @return
     */
    List<NewOutListVo> newOutList(NewOutListDto newOutListDto) throws ParseException;

    /**
     * 查看个人全部行程
     * @param userNewOutListDto
     * @return
     */
    List<NewOutListVo> userNewOutList(UserNewOutListDto userNewOutListDto) throws ParseException;

    /**
     * 部门查询人员
     * @param deptId
     * @return
     */
    List<UserListByDeptIdVo> userListByDeptId(Integer deptId);

    /**
     * 假期类型列表
     * @return
     */
    List<LeaveTypeListVo> leaveTypeList();

    /**
     * 请假统计下载
     *
     * @param loginDto
     * @return
     */
    List<LeaveListDownLoadVo> leaveListDownLoad(LeaveListDto loginDto);

    /**
     * 用车申请下载
     * @param useCarListDto
     * @return
     */
    List<UseCarListDownLoadVo> useCarListDownLoad(UseCarListDto useCarListDto);

    /**
     * 通知列表
     * @param newsListDto
     * @return
     */
    NewsListVo newsList(NewsListDto newsListDto);

    /**
     * 添加通知
     * @param addNews
     */
    void addNews(AddNews addNews);

    /**
     *上传文件
     * @param file
     * @return
     */
    String upLoadPhoto(MultipartFile file);

    /**
     * 获取通知总数
     * @return
     */
    int newsCount();

    /**
     * 新用车列表
     * @param dates
     * @return
     */
    List<NewUseCarListVo> newUseCarList(String dates) throws Exception;

    /**
     * 用车申请 取消
     * @param id
     */
    void PCOrderCarDel(Integer id) throws Exception;

    /**
     * 用车申请编辑
     * @param pcOrderCarEditDto
     */
    void PCOrderCarEdit(PCOrderCarEditDto pcOrderCarEditDto) throws Exception;

    /**
     * 用车详情
     * @param id
     * @return
     */
    UseCar PCOrderCarInfo(Integer id) throws Exception;

    /**
     * 外出取消
     * @param id
     */
    void outDel(Integer id) throws Exception;
}
